home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-08-16 | 88.3 KB | 1,117 lines |
- % %18000000
- % DEFINITIONS FOR APPLE PROTOCOL (WITHIN TTY REQUESTS) %18000100
- % %18000200
- DEFINE 18000300
- UPLOADBLOCKING= 14 # % NUMBER OF RECORDS PER BLOCK 18000400
- % FOR UPLOADING, MINUS 1 18000500
- , APPLETRANSNO = TALLY[0]# 18000700
- , APPLECODE = TALLY[2]# 18000900
- , DEQUEUE = APPLETRANSNO [5] # 18001000
- , BREAKNOTICE = APPLETRANSNO [6] # 18001100
- , WAIT4QUEUED = APPLETRANSNO [7] # 18001200
- , STOPONBRK = BREAK:STOPPED # 18001300
- , APPLESWITCHBASE (X, Y) 18001400
- = BREAK : STOPPED 18001500
- , LOSSOFCARRIER : STOPPED 18001600
- , BUFOVFL : X 18001700
- , STOPBIT : X 18001800
- , Y 18001900
- # 18002000
- , APPLESW97 = APPLESWITCHBASE ( NULL 18002100
- , TIMEOUT : STOPPED 18002200
- ) 18002300
- # 18002400
- , APPLEERRSW(X,Y)= APPLESWITCHBASE (X,Y) # 18002500
- , XMIT(X) = BEGIN 18002600
- CRC[0] = CRC[0] + X. 18002700
- CHAR= X OR 4"80". % SET PARITY BIT 18002800
- TRANSMIT [STOPONBRK]. 18002900
- END 18003000
- # 18003100
- , XMITONE = XMIT(CHAR) # 18003200
- , SENDTRANSNO = BEGIN 18003300
- CHAR = APPLETRANSNO AND 4"0F". % STRIP OFF [7:4] 18003400
- CHAR = CHAR + 4"41". % THIS MAKES ASCII A-P FROM 018003500
- XMITONE. 18003600
- END 18003700
- # 18003800
- , SENDHEXCHAR(X)=BEGIN 18003900
- IF X >9 THEN CHAR = X + 4"37" %ASCII A-F 18004000
- ELSE CHAR = X OR 4"30". %ASCII 0-9 18004100
- XMITONE. 18004200
- END 18004300
- # 18004400
- , SENDCRC = BEGIN 18004500
- CRC[1] = CRC[0] AND 4"0F". 18004600
- CRC[0] = CRC[0] ASR 4. 18004700
- SENDHEXCHAR (CRC[0]). 18004800
- SENDHEXCHAR (CRC[1]). 18004900
- END. 18005000
- # 18005100
- , SENDPADDING = TRANSMIT "BB" [STOPONBRK] # 18005200
- , REPLY (TYPE, FATAL) = % SEND ACKNOWLEDGEMENT OR 18005300
- BEGIN % CONTROL MSG TO APPLE 18005400
- CODE = ASCII. 18005500
- INITIATE TRANSMIT. 18005600
- CRC[0] = 0. 18005700
- SENDPADDING. 18005800
- CODE = BINARY. 18005900
- XMIT (ASCIISTX). 18006000
- SENDTRANSNO. 18006100
- XMIT (TYPE). 18006200
- IF FATAL THEN XMIT(ASCIIA) ELSE XMIT(ASCIIB). 18006300
- XMIT (ASCIIETX). 18006400
- SENDCRC. 18006500
- XMIT (ASCIICR). 18006600
- FINISH TRANSMIT. 18006700
- END 18006800
- # 18006900
- , STOPTHEAPPLE = 18007000
- BEGIN 18007100
- REPLY (ASCIICAN, TRUE). 18007200
- CODE=ASCII. 18007300
- INITIATE RECEIVE. 18007400
- RECEIVE (5 SEC) CHAR [97,END:STOPPED]. 18007500
- IF CHAR = "S" THEN 18007600
- BEGIN 18007700
- RECEIVE (150 MILLI) "TOP" [97, FORMATERR:RETRYSTOP]. 18007800
- RECEIVE (150 MILLI) CHAR [97, END: STOPPED]. 18007900
- END. 18008000
- RETRYSTOP: % TRY TO STOP THE APPLE AGAIN 18008100
- DISCARDTHEREST (RETRYSTOP,RETRYSTOP1). 18008200
- RETRYSTOP1: 18008220
- % TOGGLE LAST BIT OF TRANS NBR: ALTERNATE GOOD AND BAD 18008240
- % TRANSMISSION NUMBERS TO SHAKE APPLE LOOSE 18008250
- APPLETRANSNO=APPLETRANSNO XOR 1. 18008260
- GO STOPAPPLE. % TO TRY AGAIN 18008280
- END. 18008300
- # 18008400
- , IFWRONGTRANSNO= 18008500
- CHAR = CHAR - 4"41". %CONVERT FROM 7"A->P" TO 0-F 18008600
- IF CHAR < 4"10" THEN 18008700
- BEGIN 18008800
- CHAR = CHAR XOR APPLETRANSNO. %EXPOSE 18008900
- CHAR = CHAR AND 4"0F". %DIFFERENCE 18009000
- END. 18009100
- IF CHAR NEQ 0 % THEN WE RECEIVED WRONG TRANS # 18009200
- # 18009300
- , INCREMENTTRANS = 18009400
- BEGIN 18009500
- APPLETRANSNO = APPLETRANSNO + 1. 18009600
- APPLETRANSNO[4] = FALSE. 18009700
- END 18009800
- # 18009900
- , MASKOFFPARITY= CHAR[7] = FALSE # 18010000
- , RECEIVEONE(X)= RECEIVE (150 MILLI) CHAR [99,END:X] # 18010100
- , IFRECEIVE = RECEIVEONE (NAKEND). 18010200
- IF CHAR = 18010300
- # 18010400
- , DISCARDTHEREST (LOOP, EXIT) = 18010500
- BEGIN 18010600
- RECEIVEONE (EXIT). 18010700
- GO LOOP. 18010800
- END 18010900
- # 18011000
- , STOPORSKIPPADDING (WHENSTOP) = 18011100
- IF CHAR = "A" THEN % SKIP INITIAL "A"S WHICH ARE 18011200
- BEGIN % PADDING INSERTED BY APPLE 18011300
- SKIPFIRSTAS: 18011400
- IFRECEIVE "A" THEN GO SKIPFIRSTAS. 18011500
- END 18011600
- ELSE 18011700
- IF CHAR = "S" THEN 18011800
- BEGIN 18011900
- IFRECEIVE "T" THEN 18012000
- BEGIN 18012100
- IFRECEIVE "O" THEN 18012200
- BEGIN 18012300
- IFRECEIVE "P" THEN 18012400
- BEGIN 18012500
- RECEIVEONE (STOPRECEIVED). 18012600
- IF FALSE THEN 18012700
- BEGIN 18012800
- STOPRECEIVED: WHENSTOP. 18012900
- END.END.END.END.END 18013000
- # 18013100
- . 18013200
- % 18020000
- % DEFINES FOR KERMIT REQUESTS (WITHIN TTY REQUESTS) 18020100
- % 18020200
- DEFINE 18020300
- KERCNT = TALLY [0] # 18020400
- , KERSEQ = TALLY [3] # 18020500
- , KERCHAR(X) = X + 32 # 18020600
- , KERUNCHAR(X) = X - 32 # 18020700
- , KERCTL(X) = X XOR 64 # 18020800
- , KERRCV = RECEIVE (50 MILLI) # 18020900
- , KERRCVCHAR = KERRCV CHAR # 18021000
- , KERCALCBCC = 18021100
- BEGIN 18021200
- KERCNT = CRC[0] AND 4"C0". 18021300
- KERCNT = KERCNT ASR 6. 18021400
- CRC[0] = CRC[0] + KERCNT. 18021500
- CRC[0] = CRC[0] AND 4"3F". 18021600
- CRC[0] = KERCHAR (CRC[0]). 18021700
- END # 18021800
- , KERPKTHEAD (CNT,TYPE) = 18021900
- BEGIN 18022000
- INITIATE TRANSMIT. 18022100
- KERTRANSMIT(SOH). % SEND MARK 18022200
- KERTRANSMIT(CNT). % SEND COUNT 18022300
- CHAR = KERSEQ. 18022400
- KERTRANSMIT(CHAR). % SEND SEQ 18022500
- CRC[0] = CNT + CHAR. 18022600
- KERTRANSMIT(TYPE). 18022700
- CRC[0] = CRC[0] + CHAR. 18022800
- END # 18022900
- , KERPKTTAIL = 18023000
- BEGIN 18023100
- KERCALCBCC. 18023200
- CHAR = CRC[0]. 18023250
- KERTRANSMIT(CHAR). 18023300
- IF CHAR = 4"20" THEN KERTRANSMIT(4"58"). % BUG IN ALTOS18023400
- KERTRANSMIT(CR). 18023500
- FINISH TRANSMIT. 18023600
- END # 18023700
- , KERREPLY (TYPE) = % SEND AN EMPTY PACKET (E.G. ACK, NAK, BRK) 18023800
- BEGIN 18023900
- KERPKTHEAD (4"23",TYPE). 18024000
- KERPKTTAIL. 18024100
- CODE=ASCII 18024200
- END # 18024300
- . 18024400
- 22000000
- REQUEST READTELETYPE: %************************************************22000200
- % TOG 0 NEW LINE 22000400
- % TOG 1 CR REQUIRED FOR NEW LINE 22000600
- % TOG 2 READ PAPER TAPE 22000800
- % TOG 3 ERROR TERMINATION READING PAPER TAPE 22001000
- % TOG 4 TURN OFF SEQUENCE MODE 22001200
- % TOG 5 PAPERMOTION=TRUE ON LAST OUTPUT 22001400
- % TOG 6 END OF PAPER TAPE PUNCH 22001600
- % TOG 7 PUNCH PAPER TAPE HEADER 22001800
- % CRC 0 TEMPORARY COUNTER 22002000
- % CRC 1 TEMPORARY CHARACTER STORAGE 22002200
- % TALLY 0 APPLE FILE XFER PROTOTOL XMISSION # 22002400
- % TALLY 1 ***** AVAILABLE ***** 22002600
- % TALLY 2 APPLE/KERMIT PROTOCOL CONTROL INFO 22002800
- %***********************************************************************22003000
- DEFINE 22003200
- TURNOFFSEQUENCE = TOG[4]#. 22003400
- ERROR[0] = 22003600
- STOPBIT:STOPBITERR, 22003800
- BUFOVFL:BUFOVFLERR, 22004000
- BREAK:BROKEN. 22004200
- 22004400
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22004600
- % APPLE PROTOCOL 22004800
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22005000
- 22005200
- DEFINE BEIMPATIENT = APPLECODE [3] # %%%%%%%%%% 22005400
- , EOTFOUND = APPLECODE [3] # % DEFINE 22005600
- , REPORTDOWNRESULT = APPLECODE [2] # % BITS 22005800
- , GETFILENAME = APPLECODE [1] # % IN 22006000
- , UPLOADING = APPLECODE [0] # % APPLECODE 22006200
- 22006400
- , FIRSTRECEIVE (TIME,ONEND)= 22006600
- RECEIVE (TIME) CHAR [98, END:ONEND 22006800
- ,CONTROL:CONTROLMSGRECD 22007000
- ,WRU :CONTROLMSGRECD 22007200
- ] 22007400
- # 22007600
- , RECEIVEFIRSTCHAR (TIMELIMIT) = 22007800
- FIRSTRECEIVE (TIMELIMIT,STOPPED) # 22007900
- , RECEIVECHAR(X) = 22008000
- BEGIN 22008200
- RECEIVEONE (X). 22008400
- MASKOFFPARITY. 22008600
- CRC[0] = CRC[0] + CHAR 22008800
- END 22009000
- # 22009200
- , GETHEXCHAR = 22009400
- BEGIN 22009600
- RECEIVEONE (NAKIT). 22009800
- MASKOFFPARITY. 22010000
- CHAR = CHAR - 4"30". 22010200
- IF CHAR > 9 THEN CHAR = CHAR - 7. % FOR A-F 22010400
- IF CHAR > 4"0F" THEN GO BADTEXT. 22010600
- END 22010800
- # 22011000
- , STOREX(X) = STORE X [ENDOFBUFFER : NAKIT] # 22011200
- , REPEATTILFULL = 22011400
- IF LINECOUNT = UPLOADBLOCKING THEN 22011600
- GO RETURNMSG 22011800
- ELSE 22012000
- BEGIN 22012200
- LINECOUNT = LINECOUNT +1. 22012400
- GO NEXTDATABLOCK 22012600
- END 22012800
- # 22013000
- . 22013200
- % KERMIT DEFINES: 22013210
- DEFINE KPKTRCV = 22013215
- BEGIN 22013220
- KERRCVCHAR [150]. 22013225
- CRC[0] = CRC[0] + CHAR. 22013230
- END # 22013235
- , KERTRANSMIT(WHAT) = TRANSMIT WHAT [BREAK: KBROKEN] # 22013240
- , ENFORCEHALFDUP (AGAIN,NEXT) = 22013245
- BEGIN 22013250
- KERRCVCHAR [BREAK: KBROKEN, BUFOVFL: NULL 22013252
- ,STOPBIT:NULL, TIMEOUT:NEXT]. 22013255
- GO AGAIN 22013260
- END # 22013265
- . 22013270
- ERROR[97] = APPLESW97. 22013400
- ERROR[98] = APPLEERRSW (SKIPFIRSTAS,TIMEOUT:NAKIT ). 22013600
- ERROR[99] = APPLEERRSW (BADTEXT,TIMEOUT:STOPPED). 22013800
- ERROR [150] = BREAK: KBROKEN ,BUFOVFL: KNAK 22013810
- ,STOPBIT:KNAK ,TIMEOUT: KNAK . 22013820
- 22014000
- CODE=ASCII. 22014005
- IF DEQUEUE THEN 22014010
- BEGIN 22014015
- DEQUEUE=FALSE. 22014020
- BREAK[TRANSMIT]=TRUE. 22014025
- TERMINATE ERROR. 22014030
- END. 22014035
- IF APPLECODE = 4"FF" THEN % KERMIT AUTO RCV DATA MODE 22014045
- %%%%%%%%%%%%%%%%%%% 22014050
- % KERMIT AUTO RECEIVE -- FOR RECEIVING AND ACKING KERMIT 22014055
- % "D" PACKETS, UNTIL SOME OTHER PACKET 22014060
- % COMES ALONG 22014065
- %%%%%%%%%%%%%%%%%% 22014070
- BEGIN 22014075
- APPLECODE = 0. % ONLY STAY IN RCV MODE IF SPECIFICALLY OK TO DO SO22014080
- INITIATE RECEIVE (NULL). 22014085
- KERCNT = 2. % ALLOW 1 RETRY LOOKING FOR SOH 22014090
- KWAIT1: 22014095
- IF KERCNT=0 THEN GO RECVCHAR % DROP OUT OF AUTO RCV 22014100
- ELSE 22014105
- BEGIN 22014110
- RECEIVE (5 SEC) CHAR [BREAK:RECVCHAR % DROP OUT OF AUTO RCV 22014115
- ,BUFOVFL:KWAIT1, STOPBIT:KWAIT1 22014120
- ,TIMEOUT:KSENDNAK 22014125
- ,SOH: KSTARTPKT 22014130
- ,CONTROL: CONTROLMSGRECD]. 22014132
- KWAIT2: KERRCVCHAR [BREAK:BROKEN % DROP OUT OF AUTO RECV 22014135
- ,BUFOVFL: KWAIT1, STOPBIT:KWAIT2, TIMEOUT: KWAIT3 22014140
- ,SOH: KSTARTPKT]. 22014145
- GO KWAIT2. % KEEP LOOKING FOR SOH 22014150
- KWAIT3: KERCNT= KERCNT-1. % DECREMENT SOH WAIT RETRY COUNT 22014155
- GO KWAIT1. 22014160
- KSTARTPKT: % SOH HAS BEEN RECEIVED: RECEIVE PACKET 22014165
- CODE=BINARY. % PREVENT TRANSLATION TO EBCDIC 22014170
- CRC[0]=0. 22014175
- KPKTRCV. % GET COUNT 22014180
- KERCNT= KERUNCHAR (CHAR). 22014185
- KERCNT= KERCNT -3. % NUMBER CHARACTERS OF DATA 22014190
- KPKTRCV. % GET SEQ 22014195
- GETSPACE [KNAK]. 22014200
- IF CHAR = KERSEQ THEN 22014205
- BEGIN 22014210
- KPKTRCV. % GET TYPE 22014215
- IF CHAR = 4"44" THEN % "D" PACKET 22014220
- BEGIN 22014225
- STORE 4"BF". % MARK AS NDL PROCESSED "D" PKT 22014230
- KGETDATA: IF KERCNT NEQ 0 THEN % PACKET DATA LOOP 22014235
- BEGIN 22014240
- KPKTRCV. 22014245
- KERCNT= KERCNT - 1. 22014250
- IF CHAR = 4"23" THEN % # = QUOTE FOR CNTL CHAR 22014255
- IF KERCNT > 0 THEN % WHICH IT SHOULD BE 22014260
- BEGIN 22014265
- KPKTRCV. % GET QUOTED CHAR 22014270
- KERCNT= KERCNT -1. 22014275
- IF CHAR NEQ 4"23" THEN % NOTE: "##"="#"22014280
- CHAR= KERCTL(CHAR). 22014285
- END. 22014290
- STORE. 22014295
- GO KGETDATA. % LOOP FOR MORE 22014300
- END. 22014305
- KERRCVCHAR [150]. % GET CRC[0] 22014310
- KERCALCBCC. % COMPARE OUR BCC WITH REMOTE'S 22014315
- IF CRC[0]=CHAR THEN % BCC OK 22014320
- BEGIN 22014325
- KACK: ENFORCEHALFDUP (KACK,KSENDACK). 22014330
- KSENDACK: KERREPLY (4"59"). % SEND "Y" PKT 22014335
- IF KERSEQ = 4"5F" THEN KERSEQ= 4"20" % FOLD SEQ22014340
- ELSE KERSEQ= KERSEQ+1. % INCREMENT SEQ 22014345
- APPLECODE=4"FF". % STAY IN AUTO RCV MODE 22014350
- END 22014355
- ELSE % BAD BCC 22014360
- IF RETRY = 0 THEN % TOO MANY NAKS 22014365
- BEGIN 22014370
- KBRK: ENFORCEHALFDUP(KBRK,KSENDBRK). 22014375
- KSENDBRK: KERREPLY (4"42"). % SEND "B" PKT 22014380
- INITIALIZE TEXT. % SEND FAKE "B" PKT TO PGM 22014385
- STORE SOH. 22014390
- STORE 4"23". % PKT LENGTH 22014395
- CHAR= KERSEQ. 22014396
- STORE. % SEQ # 22014400
- STORE 4"42". % "B" 22014405
- CHAR = CRC[0]. % BCC IS: 22014406
- STORE. % SAME AS IN PKT SENT TO RMT 22014410
- END 22014415
- ELSE % RETRY NOT EXHAUSTED-- SEND NAK PKT 22014420
- BEGIN 22014425
- KNAK: ENFORCEHALFDUP(KNAK,KSENDNAK). 22014430
- KSENDNAK: KERREPLY(4"4E"). % SEND "N" PKT 22014435
- RETRY= RETRY - 1. 22014440
- APPLECODE=4"FF". % STAY IN AUTO RCV 22014445
- KERCNT=0. 22014446
- TERMINATE NOINPUT. 22014450
- END. END 22014455
- ELSE % NOT "D" PKT 22014460
- BEGIN 22014465
- CRC[0]= CHAR. % SAVE PACKET TYPE 22014470
- STORE SOH. 22014475
- KERCNT= KERCNT + 3. % RESTORE COUNT 22014480
- CHAR= KERCHAR(KERCNT). 22014485
- STORE. 22014490
- CHAR= KERSEQ. 22014492
- STORE. % SEQ # 22014495
- CHAR= CRC[0]. % HOLDS PACKET TYPE 22014500
- STORE. 22014502
- KRCVTEXT: CODE=ASCII. 22014505
- KERCNT=0. 22014506
- GO RECVTEXT. % GET REST OF PACKET 22014510
- END.END 22014515
- ELSE % MIS-MATCHED SEQ 22014520
- BEGIN 22014525
- IF CHAR = 4"5F" AND KERSEQ = 4"20" THEN % WAS REXMITTED22014530
- BEGIN 22014535
- KERSEQ= 4"5F". 22014540
- GO KRTXACK. 22014545
- END 22014550
- ELSE % NOT RETRANSMIT OF FOLLOWED BY SEQ FOLD AROUND 22014555
- BEGIN 22014560
- CHAR = CHAR + 1. % BUMP UP RECEIVED PACKET # 22014565
- IF CHAR = KERSEQ THEN % PACKET WAS RETRANSMITTED 22014570
- BEGIN 22014575
- KERSEQ= KERSEQ - 1. % BACK UP OUR PACKET COUNT 22014580
- KRTXACK: STORE 4"BF". % RETURN EMPTY PACKET TO PGM 22014585
- GO KACK. % RE-ACK THE PACKET 22014590
- END 22014595
- ELSE % NOT A RETRANSMITTED PACKET 22014600
- BEGIN 22014605
- KPKTRCV. % GET TYPE 22014610
- IF CHAR = 4"53" THEN % "S" PKT 22014615
- % SEND GARBAGE TO PGM - THEN WAIT FOR 22014620
- % RETRANSMIT OF "S" PACKET 22014625
- GO KRCVTEXT 22014630
- ELSE % STRAY PACKET -- NAK IT 22014635
- GO KNAK. 22014640
- END.END.END. 22014645
- CODE = ASCII. % NORMAL EXIT 22014650
- INITIALIZE RETRY. 22014655
- KERCNT= 0. 22014656
- GO RETURNMSG. 22014660
- KBROKEN: 22014665
- CODE=ASCII. 22014670
- GO BROKEN. 22014675
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22014680
- END.END % OF KERMIT AUTO RECIEVE 22014685
- % 22014690
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 22014695
- ELSE % NORMAL APPLE CODE HERE 22014700
- IF APPLECODE NEQ 0 THEN 22014710
- BEGIN 22014720
- IF BREAKNOTICE AND NOT WAIT4QUEUED THEN 22014800
- % WE HAVE TO NOTIFY PROGRAM OF BREAK 22015000
- BREAKNOTICE = FALSE % AND THEN GO STOPPED 22015200
- ELSE 22015400
- IF REPORTDOWNRESULT THEN 22015600
- IF APPLECODE = 4"04" THEN % NO OTHER BITS SET (NO ERRS) 22015800
- BEGIN 22016000
- GETSPACE [TRYAGAIN]. 22016200
- STORE DOWNLOADEDOK [ENDOFBUFFER:TRYAGAIN]. 22016400
- GO FINISHEDREQUEST. 22016600
- END 22016800
- ELSE % GO STOPPED 22017000
- ELSE 22017200
- BEGIN 22017400
- LINECOUNT = 0. 22017600
- IF GETFILENAME AND BEIMPATIENT THEN RETRY=100. 22017800
- NEXTDATABLOCK: 22018000
- CODE = ASCII. 22018200
- IF GETFILENAME THEN 22018400
- BEGIN 22018600
- IF WAIT4QUEUED THEN % GO TO XMIT REQUEST ONCE 22018800
- BEGIN % SOMETHING IS QUEUED 22019000
- LINE(BUSY) = FALSE. 22019200
- IF STATION(QUEUED) THEN 22019400
- TERMINATE NOINPUT. 22019600
- END. 22019800
- INITIATE RECEIVE (NULL). 22020000
- IF BEIMPATIENT THEN % WE MAY HAVE MISSED THE 22020200
- BEGIN % TRANSMISSION, IN WHICH CASE 22020400
- APPLETRANSNO = 0. % WE CAN PROD THE APPLE TO 22020600
- FIRSTRECEIVE (10 SEC, SKIPFIRSTSTOP). % SEND ANOTHER 22020800
- IF FALSE THEN %ONLY IF WE GOT A CR ABOVE 22020840
- BEGIN 22020860
- SKIPFIRSTSTOP: RECEIVE (150 MILLI) "STOP" [99,FORMATERR:STOPPED]. 22020880
- RECEIVE (150 MILLI) CHAR [97,END:STOPSKIPPED]. 22020900
- GO STOPPED. % WASN'T A CR 22020920
- STOPSKIPPED: RECEIVEFIRSTCHAR(NULL). 22020940
- END. 22020960
- BEIMPATIENT = FALSE. 22021000
- END 22021200
- ELSE RECEIVEFIRSTCHAR (NULL). 22021400
- INITIALIZE RETRY. 22023400
- LINE(BUSY) = TRUE. 22023600
- END 22023800
- ELSE 22024000
- BEGIN 22024200
- INITIATE RECEIVE (NULL). 22024400
- RECEIVEFIRSTCHAR (5 SEC). 22024600
- END. 22024800
- STOPORSKIPPADDING (GO STOPPED). 22025000
- IF WAIT4QUEUED THEN % WE WANT TO DETECT A "STOP" OR MANUAL 22025200
- IGNORETHEREST: % KEYIN, BUT IGNORE ANYTHING ELSE 22025400
- DISCARDTHEREST(IGNORETHEREST,TRYAGAIN) 22025600
- ELSE GETSPACE [TRYAGAIN]. 22025800
- ISTHISSTX: 22026000
- IF CHAR=STX THEN 22026200
- BEGIN 22026400
- STXFOUND: CODE=BINARY. 22026600
- CRC[0] = CHAR. 22026800
- RECEIVECHAR (NAKIT). 22027000
- IF GETFILENAME THEN 22027200
- BEGIN 22027400
- APPLETRANSNO= CHAR-4"41". 22027600
- APPLETRANSNO= APPLETRANSNO AND 4"0F". 22027800
- % NOTE THAT BITS 4-7 ARE ZEROED -- 22028000
- % BEWARE OF BOOLEANS USING THESE BITS. 22028200
- END 22028400
- ELSE 22028600
- BEGIN 22028800
- IFWRONGTRANSNO THEN GO BADTEXT. 22029000
- END. 22029200
- RECEIVECHAR (NAKIT). 22029400
- IF CHAR = ASCIICAN OR CHAR = ASCIISI THEN 22029600
- CANNED: DISCARDTHEREST (CANNED,STOPAPPLE) 22029800
- ELSE 22030000
- IF CHAR = ASCIIACK OR CHAR = ASCIINAK THEN 22030200
- GO BADTEXT 22030400
- ELSE 22030600
- IF CHAR = ASCIISOH THEN % FILE NAME FOLLOWS 22030800
- IF GETFILENAME THEN % THIS IS WHAT WE WANT 22031000
- BEGIN 22031200
- STOREX (FILEFOLLOWS). 22031400
- RECEIVECHAR(NAKIT). % PREPARE TO TRANS- 22031600
- END % FER TEXT 22031800
- ELSE GO NAKIT % UNEXPECTED 22032000
- ELSE % THIS IS A BLOCK OF DATA 22032200
- IF GETFILENAME THEN GO NAKIT % UNEXPECTED 22032400
- ELSE EOTFOUND=FALSE. 22032600
- STORETEXT: IF CHAR = ASCIIEOT THEN EOTFOUND=TRUE. 22032800
- STOREX (CHAR). 22033000
- RECEIVECHAR (NAKIT). 22033200
- IF CHAR NEQ ASCIIETX THEN GO STORETEXT. 22033400
- 22033600
- % CHECK CRC: 22033800
- GETHEXCHAR. 22034000
- CHAR = CHAR ASL 4. 22034200
- CRC[0] = CRC[0] XOR CHAR. %CHECK LEFT 4 BITS 22034400
- GETHEXCHAR. 22034600
- CRC[0] = CRC[0] XOR CHAR. 22034800
- CODE=ASCII. 22035000
- IF CRC[0] NEQ 0 THEN 22035200
- BEGIN 22035400
- EOTFOUND=FALSE. 22035600
- BADTEXT: DISCARDTHEREST (BADTEXT, NAKIT) 22035800
- END 22036000
- ELSE % EVERYTHING REC'D OK 22036200
- BEGIN 22036400
- RECEIVEONE(GOTIT). 22036600
- GO NAKIT. % NOT A CR AT END 22036800
- GOTIT: INITIALIZE RETRY. 22037000
- IF UPLOADING THEN 22037200
- IF EOTFOUND THEN 22037400
- BEGIN 22037600
- FINISHEDREQUEST: APPLECODE=0. 22037800
- GO RETURNMSG 22038000
- END 22038200
- ELSE 22038400
- BEGIN 22038600
- STOREX(ASCIICR). % MARK RECORD AS GOOD 22038800
- REPLY (ASCIIACK, FALSE). 22039000
- INCREMENTTRANS. 22039200
- REPEATTILFULL. 22039400
- END 22039600
- ELSE % GETFILENAME 22039800
- BEGIN 22040000
- WAIT4QUEUED=TRUE. 22040200
- GO RETURNMSG. 22040400
- END.END.END 22040600
- ELSE IF CHAR=NAK THEN GO BADTEXT 22040800
- ELSE % KEEP LOOKING FOR STX 22041000
- BEGIN 22041200
- RECEIVEONE (NAKEND). 22041400
- GO ISTHISSTX. 22041600
- END. 22041800
- 22042000
- NAKIT: REPLY (ASCIINAK,FALSE). 22042200
- NAKEND: IF RETRY > 0 THEN 22042400
- BEGIN 22042600
- RETRY=RETRY-1. 22042800
- IF UPLOADING THEN 22043000
- IF LINECOUNT=0 THEN % NO PRIOR RECORDS TO LOOSE 22043200
- GO TRYAGAIN % IN THIS BLOCK 22043400
- ELSE 22043600
- BEGIN 22043800
- STOREX(ASCIIETX). % MARK RECORD AS BAD 22044000
- REPEATTILFULL. 22044200
- END 22044400
- ELSE 22044600
- BEGIN 22044800
- TRYAGAIN: INITIALIZE TEXT. 22045000
- PAUSE. 22045200
- GO NEXTDATABLOCK. 22045400
- END.END. 22045600
- 22045800
- STOPAPPLE: 22046000
- STOPTHEAPPLE 22046200
- END. 22046400
- STOPPED: 22046600
- INITIALIZE TEXT. 22046800
- INITIALIZE RETRY. 22047000
- PAUSE. 22047200
- GETSPACE [STOPPED]. % SIGNAL A BREAK 22047400
- STORE ASCIICAN [ENDOFBUFFER:STOPPED]. % CONDITION TO PROGRAM 22047600
- CODE=ASCII. 22047800
- 22048000
- GETOUT: 22048200
- APPLECODE = 0. 22048400
- GO ENDOFINPUT. 22048600
- 22048800
- CONTROLMSGRECD: % SOMEONE KEYED IN A CONTROL MESSAGE -- PASS IT 22049000
- LINE(BUSY)=TRUE. % ON TO THE MCS 22049200
- APPLECODE = 0. 22049400
- GETSPACE [CANTGETSPACE]. 22049600
- STORE [ENDOFBUFFER:TOOLONG]. 22049800
- BREAKNOTICE=TRUE. 22050000
- GO RECVTEXT. 22050200
- END. 22050400
- 22050600
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22050800
- % END OF APPLE PROTOCOL 22051000
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22051200
- 22051400
- 22051600
- IF NEWLINE THEN 22051800
- BEGIN 22052000
- NEWLINE=FALSE. 22052200
- SENDCR: 22052400
- INITIATE TRANSMIT. 22052600
- IF CRREQUIRED THEN 22052800
- TRANSMIT CR [BREAK:SENDCR]. 22053000
- CRREQUIRED = TRUE. 22053200
- WAITFORCR. 22053400
- TRANSMIT LF [BREAK:SENDCR]. 22053600
- FINISH TRANSMIT. 22053800
- END. 22054000
- IF SEQUENCE THEN 22054200
- BEGIN 22054400
- INITIATE TRANSMIT. 22054600
- TRANSMIT SEQUENCE [BREAK:TERMSEQMODE]. 22054800
- TRANSMIT " " [BREAK:TERMSEQMODE]. 22055000
- FINISH TRANSMIT. 22055200
- NEWLINE = TRUE. 22055400
- TURNOFFSEQUENCE = FALSE. 22055600
- CONTROLFLAG = FALSE. 22055800
- LINE(BUSY) = FALSE. 22056000
- IF STATION(QUEUED) THEN 22056200
- TERMINATE NOINPUT. 22056400
- INITIATE RECEIVE. 22056600
- RECVCHARSEQ: 22056800
- RECEIVE(NULL) CHAR [0, 22057000
- END:TERMSEQMODE, 22057200
- "@":TERMSEQMODE, 22057400
- "*":TERMSEQMODE, 22057600
- WRU:TERMSEQMODE, 22057800
- LINEDELETE:DELETELINE, 22058000
- BACKSPACE:RECVCHARSEQ, 22058200
- CONTROL:NULL]. 22058400
- NEWLINE = FALSE. 22058600
- END 22058800
- ELSE 22059000
- BEGIN 22059200
- LINE(BUSY)=FALSE. 22059400
- IF STATION(QUEUED) THEN 22059600
- TERMINATE NOINPUT. 22059800
- INITIATE RECEIVE. 22060000
- RECVCHAR: 22060200
- RECEIVE (NULL) CHAR [0, 22060400
- END:ENDOFINPUT, 22060600
- BACKSPACE:RECVCHAR, 22060800
- LINEDELETE:RECVCHAR, 22061000
- CONTROL:NULL, 22061200
- WRU:ENDOFINPUT]. 22061400
- END. 22061600
- LINE(BUSY) = TRUE. 22061800
- GETSPACE[CANTGETSPACE]. 22062000
- STORE [ENDOFBUFFER:TOOLONG]. 22062200
- RECVTEXT: 22062400
- RECEIVE (NULL) TEXT[0 22062600
- ,ENDOFBUFFER:TOOLONG 22062800
- ,END 22063000
- % , WRU THIS LINE REMOVED 22063200
- ,BACKSPACE:NULL 22063400
- ,LINEDELETE:DELETELINE 22063600
- ]. 22063800
- ENDOFTEXT: 22064000
- IF CHAR = CR THEN % CR IS END CHAR 22064200
- CRREQUIRED = FALSE. 22064400
- IF SEQUENCE THEN 22064600
- BEGIN 22064800
- STORE SEQUENCE. 22065000
- IF CONTROLFLAG THEN 22065200
- TURNOFFSEQUENCE = TRUE. 22065400
- IF TURNOFFSEQUENCE THEN 22065600
- SEQUENCE = FALSE 22065800
- ELSE 22066000
- INCREMENT SEQUENCE[SEQOFLOW]. 22066200
- END. 22066400
- ENDOFINPUT: 22066600
- GETSPACE[CANTGETSPACE]. 22066800
- TERMINATE LOGICALACK. 22067000
- IF CONTROLFLAG THEN % GOT CONTROL MSG-- WAS IT "?BRK"? 22067010
- BEGIN 22067020
- FETCH. % IGNORE CONTROL CHAR 22067030
- FETCH [ENDOFBUFFER:NOTBRK]. 22067040
- PAUSE. 22067050
- IF CHAR="B" OR CHAR=4"82" THEN 22067060
- BEGIN 22067070
- FETCH [ENDOFBUFFER:NOTBRK]. 22067080
- IF CHAR="R" OR CHAR=4"99" THEN 22067090
- BEGIN 22067100
- FETCH [ENDOFBUFFER:NOTBRK]. 22067110
- IF CHAR="K" OR CHAR=4"92" THEN 22067120
- FETCH [ENDOFBUFFER:FAKEBREAK]. 22067130
- END.END.END. 22067140
- NOTBRK: 22067150
- NEWLINE=TRUE. 22067200
- RETURNMSG: 22067400
- $ SET OMIT = ENHANCED 22067600
- TERMINATE NORMAL. 22067800
- $ SET OMIT = NOT ENHANCED 22068000
- TERMINATE NORMAL [SYSTEMDOWN:NULL]. 22068200
- DELAY (10 MILLI). 22068400
- GO RETURNMSG. 22068600
- $ POP OMIT OMIT 22068800
- $ SET AUXLOGIC=AUXCODE 22069000
- SEQOFLOW: 22069200
- INITIATE TRANSMIT. 22069400
- TRANSMIT SEQOVFLMSG [BREAK:TERMSEQMODE]. 22069600
- FINISH TRANSMIT. 22069800
- SEQERR = TRUE. 22070000
- $ POP AUXLOGIC 22070200
- TERMSEQMODE: 22070400
- LINE(BUSY) = TRUE. 22070600
- GETSPACE[CANTGETSPACE]. 22070800
- TURNOFFSEQUENCE = TRUE. 22071000
- IF CHAR = "@" THEN 22071200
- BEGIN 22071400
- STORESPEC: 22071600
- STORE [ENDOFBUFFER:TOOLONG]. 22071800
- GO TO RECVTEXT. 22072000
- END. 22072200
- IF CHAR = "*" THEN 22072400
- GO TO STORESPEC. 22072600
- GO TO ENDOFTEXT. 22072800
- $ SET AUXLOGIC=AUXCODE % READTELETYPE STOPBITERR 22073000
- STOPBITERR: 22073200
- LINE(BUSY) = TRUE. 22073400
- INITIATE TRANSMIT. 22073600
- TRANSMIT ERRMSG [BREAK:NULL]. 22073800
- FINISH TRANSMIT. 22074000
- IF RETRY > 0 THEN 22074200
- BEGIN 22074400
- RETRY = RETRY - 1. 22074600
- TERMINATE NOINPUT. 22074800
- END. 22075000
- TERMINATE ERROR. 22075200
- BUFOVFLERR: 22075400
- LINE(BUSY) = TRUE. 22075600
- DELAY(200 MILLI). 22075800
- INITIATE TRANSMIT. 22076000
- TRANSMIT BUFOVFLMSG [BREAK:NULL]. 22076200
- FINISH TRANSMIT. 22076400
- TERMINATE ERROR. 22076600
- FAKEBREAK: 22076620
- DEQUEUE = TRUE. 22076640
- LINE(BUSY) = FALSE. 22076660
- TERMINATE NOINPUT. 22076680
- $ POP AUXLOGIC 22076800
- BROKEN: 22077000
- LINE(BUSY) = TRUE. 22077200
- BREAK[RECEIVE] = FALSE. 22077400
- DELAY(200 MILLI). 22077600
- DELETELINE: 22077800
- INITIATE TRANSMIT. 22078000
- TRANSMIT "DEL" [BREAK:NULL]. 22078200
- FINISH TRANSMIT. 22078400
- NEWLINE=TRUE. 22078600
- TERMINATE NOINPUT. 22078800
- $ SET AUXLOGIC=AUXCODE % READTELETYPE TOOLONG 22079000
- TOOLONG: 22079200
- INITIATE TRANSMIT. 22079400
- TRANSMIT OVERFLOWMSG [BREAK:NULL]. 22079600
- FINISH TRANSMIT. 22079800
- INITIATE RECEIVE. 22080000
- RECEIVE (NULL) CHAR [0 22080200
- ,END:ENDOFINPUT 22080400
- ,WRU:ENDOFINPUT 22080600
- ,BACKSPACE:NULL 22080800
- ,LINEDELETE:DELETELINE 22081000
- ]. 22081200
- GO TO TOOLONG. 22081400
- $ POP AUXLOGIC 22081600
- CANTGETSPACE: 22081800
- INITIATE TRANSMIT. 22082000
- IF SYSTEMDUMPING THEN 22082200
- TRANSMIT DUMPMSG [BREAK:NULL] 22082400
- ELSE 22082600
- TRANSMIT WAITMSG [BREAK:NULL]. 22082800
- FINISH TRANSMIT. 22083000
- NEWLINE=TRUE. 22083200
- IF NOT STATION(QUEUED) THEN 22083400
- BEGIN 22083600
- LINE(BUSY)=FALSE. 22083800
- TRYFORSPACE: 22084000
- IF NOSPACE THEN 22084200
- BEGIN 22084400
- RECEIVE (5 SEC) CHAR 22084600
- [STOPBIT:NULL 22084800
- ,BUFOVFL:NULL 22085000
- ,BREAK:NULL 22085200
- ,TIMEOUT:TRYFORSPACE 22085400
- ]. 22085600
- GO TO CANTGETSPACE. 22085800
- END. 22086000
- INITIATE TRANSMIT. 22086200
- TRANSMIT OKMSG [BREAK:NULL]. 22086400
- FINISH TRANSMIT. 22086600
- END. 22086800
- TERMINATE NOINPUT. 22087000
- %***********************************************************************22087200
- 22087400
- REQUEST WRITETELETYPE: %***********************************************22100000
- DEFINE FETCHANOTHER = FETCH [ENDOFBUFFER:NOTAPPLEBLOCK] # 22100200
- , IFSENDING = FETCHANOTHER. 22100400
- IF CHAR = 22100600
- # 22100800
- , READYTODOWNLOAD = APPLECODE=READYTODOWNLOADOP # 22101000
- , KERTRANSMIT(WHAT) = TRANSMIT WHAT [BREAK:KBROKEN] # 22101010
- . 22101200
- ERROR[97] = APPLESW97. 22101400
- ERROR[98] = APPLEERRSW(SKIPFIRSTAS, TIMEOUT:NAKEND ). 22101600
- ERROR[99] = APPLEERRSW(NAKED,TIMEOUT:STOPPED). 22101800
- 22102000
- CODE = ASCII. 22102100
- IF DEQUEUE THEN 22102150
- BEGIN 22102160
- BREAK[TRANSMIT]=TRUE. 22102170
- GO BROKEN 22102180
- END. 22102190
- INITIATE TRANSMIT. 22102200
- IF NEWLINE THEN 22102400
- BEGIN 22102600
- NEWLINE=FALSE. 22102800
- IF CRREQUIRED THEN 22103000
- TRANSMIT CR [BREAK:BROKEN]. 22103200
- CRREQUIRED = TRUE. 22103400
- WAITFORCR. 22103600
- TRANSMIT LF [BREAK:BROKEN]. 22103800
- END. 22104000
- IF PAGE THEN 22104200
- TRANSMIT FF [BREAK:BROKEN]. 22104400
- IF PAPERMOTION THEN 22104600
- BEGIN 22104800
- PRINTEDAFTER = TRUE. 22105000
- MOVEPAPER: 22105200
- IF CARRIAGE THEN 22105400
- BEGIN 22105600
- TRANSMIT CR [BREAK:BROKEN]. 22105800
- WAITFORCR. 22106000
- END. 22106200
- IF LINEFEED THEN 22106400
- TRANSMIT LF [BREAK:BROKEN]. 22106600
- TEMPCOUNTER = SKIPCONTROL. 22106800
- IF TEMPCOUNTER = 0 THEN 22107000
- IF PAPERMOTION THEN 22107200
- GO TO XMITMSG 22107400
- ELSE 22107600
- GO TO ENDXMIT. 22107800
- IF SKIP THEN 22108000
- BEGIN 22108200
- SKIPLINES: 22108400
- IF TEMPCOUNTER NEQ 0 THEN 22108600
- BEGIN 22108800
- TRANSMIT VT [BREAK:BROKEN]. 22109000
- IF ADAPTER LEQ 6 THEN 22109200
- DELAY(100 MILLI). 22109400
- END. 22109600
- END 22109800
- ELSE 22110000
- IF SPACE THEN 22110200
- BEGIN 22110400
- TEMPCOUNTER = TEMPCOUNTER - 1. % 1 LF ALREADY DONE 22110600
- SPACELINES: 22110800
- IF TEMPCOUNTER NEQ 0 THEN 22111000
- BEGIN 22111200
- TRANSMIT LF [BREAK:BROKEN]. 22111400
- TEMPCOUNTER = TEMPCOUNTER - 1. 22111600
- GO TO SPACELINES. 22111800
- END. 22112000
- END. 22112200
- IF NOT PAPERMOTION THEN 22112400
- GO TO ENDXMIT. 22112600
- END 22112800
- ELSE 22113000
- IF PRINTEDAFTER THEN 22113200
- BEGIN 22113400
- TRANSMIT CRNULLF [BREAK:BROKEN]. 22113600
- WAITFORCR. 22113800
- PRINTEDAFTER = FALSE. 22114000
- END. 22114200
- TEMPCOUNTER = 0. 22114400
- IF NOT CARRIAGE THEN 22114600
- BEGIN 22114800
- 22115000
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22115200
- % APPLE PROTOCOL 22115400
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22115600
- 22115800
- IF DEQUEUE THEN GO STOPPED. % CLEAR OUT ANY QUEUED MESSAGES 22116000
- 22116200
- STARTAPPLE: 22116400
- 22116600
- APPLECODE=0. 22116800
- FETCHANOTHER. 22117000
- % KERMIT CODE: 22117005
- IF CHAR = 4"BF" THEN 22117010
- BEGIN 22117015
- FETCHANOTHER. % PAD COUNT 22117020
- FETCHANOTHER. % PAD CHAR 22117025
- FETCHANOTHER. % COUNT 22117030
- FETCHANOTHER. % SEQ 22117035
- KERSEQ= CHAR. 22117040
- FETCHANOTHER. % TYPE 22117045
- FETCH [ENDOFBUFFER: KERISOK]. % SHOULD HAVE END OF BUFFER 22117050
- IF FALSE THEN % NORMAL PATH--ENTERED IF JUST ENUF CHARS 22117055
- BEGIN 22117060
- KERISOK: 22117065
- CODE=BINARY. 22117066
- KERREPLY (4"59"). % SEND "Y" (ACK) PKT 22117070
- IF KERSEQ = 4"5F" THEN KERSEQ= 4"20" % FOLD SEQ 22117075
- ELSE KERSEQ= KERSEQ + 1. % INCREMENT SEQ 22117080
- APPLECODE= 4"FF". % GO INTO AUTO RCV MODE 22117085
- KBROKEN: 22117086
- CODE=ASCII. 22117088
- GO CHECK4RECV. 22117090
- END 22117095
- ELSE GO NOTAPPLEBLOCK. % NOT A KERMIT AUTO RECV REQUEST AFTER ALL 22117100
- END. 22117105
- CHAR = CHAR - 4"B0". 22117200
- GO TO CHAR ( B0, B1, B2, B3, B4, B5, B6, B7 22117400
- , B8, B9, BA, BB, BC 22117600
- ). 22117800
- IF FALSE THEN 22118000
- IF FALSE THEN 22118200
- B0: APPLECODE=READYTOUPLOADOP 22118400
- ELSE IF FALSE THEN 22118600
- B1: 22118800
- ELSE IF FALSE THEN 22119000
- B2: APPLECODE=READYTODOWNLOADOP 22119200
- ELSE IF FALSE THEN 22119400
- B3: 22119600
- ELSE IF FALSE THEN 22119800
- B4: APPLECODE=ABORTOP 22120000
- ELSE IF FALSE THEN 22120200
- B5: APPLECODE=FINISHUPLOADOP 22120400
- ELSE IF FALSE THEN 22120600
- B6: APPLECODE=DOWNLOADOP 22120800
- ELSE IF FALSE THEN 22121000
- B7: APPLECODE=FINISHDOWNLOADOP 22121200
- ELSE IF FALSE THEN 22121400
- B8: APPLECODE=GETFILEOP 22121600
- ELSE IF FALSE THEN 22121800
- B9: 22122000
- ELSE IF FALSE THEN 22122200
- BA: % APPLECODE=UPLOADOP % THIS IS NO LONGER SENT TO NDL 22122400
- ELSE IF FALSE THEN 22122600
- BB: 22122800
- ELSE IF FALSE THEN 22123000
- BC: APPLECODE=PROMPTOP 22123200
- . 22123400
- IF APPLECODE NEQ 0 THEN 22123600
- BEGIN % AN APPLE REQUEST HAS BEEN MADE: 22123800
- WAIT4QUEUED=FALSE. % WE'VE BEEN WAITING TO GET HERE!!! 22124000
- IF BREAKNOTICE THEN % NOTIFY PGM THAT A BRK HAS OCCURED 22124200
- BEGIN 22124400
- BREAKNOTICE=FALSE. 22124600
- GO STOPPED 22124800
- END 22125000
- ELSE 22125200
- IF APPLECODE GEQ 4"10" THEN 22125400
- BEGIN 22125600
- IF APPLECODE GEQ 4"40" THEN 22125800
- BEGIN 22126000
- CRC[0] = 0. 22126200
- SENDPADDING. 22126400
- CODE=BINARY. 22126600
- XMIT(ASCIISTX). 22126800
- IF READYTODOWNLOAD THEN INCREMENTTRANS. 22127000
- SENDTRANSNO. 22127200
- IF APPLECODE[7] THEN %XMIT CAN OR ACK 22127400
- BEGIN 22127600
- IF APPLECODE[6] THEN % CAN 22127800
- BEGIN 22128000
- XMIT(ASCIICAN). 22128200
- IF APPLECODE[5] THEN XMIT(ASCIIB) %PROMPT MSG 22128400
- ELSE XMIT(ASCIIA). %FATAL MESSAG22128600
- APPLECODE = APPLECODE AND 4"1F" 22128800
- END 22129000
- ELSE % ACK 22129200
- BEGIN 22129400
- XMIT(ASCIIACK). 22129600
- IF APPLECODE[4] THEN 22129800
- IF APPLECODE[5] THEN % READYTODOWNLOAD 22130000
- ELSE XMIT(ASCIIB) % FINISHUPLOAD 22130200
- ELSE XMIT(ASCIIB ). % READYTOUPLOAD 22130400
- APPLECODE[7]=APPLECODE[5]. %SET PATIENCE BIT 22130600
- APPLECODE =APPLECODE AND 4"9F" 22130800
- END.END. 22131000
- XMITTEXT: FETCH [ENDOFBUFFER:ENDOFTEXT]. 22131200
- XMIT(CHAR). 22131400
- GO XMITTEXT. 22131600
- ENDOFTEXT: IF APPLECODE[5] THEN XMIT(ASCIIEOT). 22131800
- XMIT(ASCIIETX). 22132000
- SENDCRC. 22132200
- XMIT(ASCIICR). 22132400
- CODE=ASCII. 22132600
- FINISH TRANSMIT. 22132800
- IF NOT APPLECODE[4] THEN GO ENDACK. 22133000
- END. 22133200
- IF APPLECODE[4] THEN % NEED SOME ACKNOWLEDGEMENT 22133400
- BEGIN 22133600
- IF TRUE THEN 22133700
- BEGIN 22133750
- INITIATE RECEIVE. 22133800
- RECEIVE (NULL ) CHAR [98,END:STOPPED]. 22134200
- APPLECODE=APPLECODE AND 4"1F" %STRIP OFF XMIT CODE 22134600
- END 22134610
- ELSE 22134620
- WAITFORNEXTREPLY: 22134640
- RECEIVE (20 SEC) CHAR [98,END:STOPPED]. 22134660
- STOPORSKIPPADDING (IF APPLECODE[3] THEN 22134800
- GO ENDACK 22135000
- ELSE GO STOPPED 22135200
- ). 22135400
- ISTHISSTX: 22135600
- IF CHAR = STX THEN 22135800
- BEGIN 22136000
- STXFOUND: CODE=BINARY. 22136200
- RECEIVEONE(NAKEND). 22136400
- MASKOFFPARITY. 22136600
- CODE=ASCII. 22136800
- IFWRONGTRANSNO THEN % WRONG TRANS # 22137000
- GO NAKED 22137200
- ELSE 22137400
- BEGIN 22137600
- RECEIVEONE(NAKEND). 22137800
- IF CHAR = ACK THEN 22138000
- BEGIN 22138200
- ACKED: DISCARDTHEREST(ACKED,ACKEND). 22138400
- ACKEND: IF APPLECODE[3] THEN GO NAKEND. 22138600
- ENDACK: INITIALIZE RETRY. 22138800
- INCREMENTTRANS. 22139000
- IF APPLECODE[4] AND NOT APPLECODE[3] THEN 22139200
- BEGIN % (DOWNLOADING) 22139400
- APPLECODE=0. 22139600
- GO RETURNMSG 22139800
- END. 22140000
- APPLECODE=APPLECODE AND 4"07". %STRIP OFF 22140200
- % XMIT CODES AND ERR INDICATOR (BIT #3) 22140400
- GO CHECK4RECV 22140600
- END 22140800
- ELSE 22141000
- BEGIN 22141200
- IF CHAR = CAN THEN 22141400
- CANNED: DISCARDTHEREST(CANNED,STOPAPPLE) 22141600
- ELSE % EITHER A NAK OR 22141800
- % SOMETHING UNEXPECTED 22142000
- BEGIN 22142200
- NAKED: DISCARDTHEREST(NAKED,NAKEND). 22142400
- NAKEND: IF RETRY > 0 THEN 22142600
- BEGIN 22142800
- RETRY = RETRY - 1. 22143000
- CODE=ASCII. 22143200
- TERMINATE NOINPUT 22143400
- END.END. 22143600
- STOPAPPLE: % TELL APPLE TO GO AWAY: 22143800
- STOPTHEAPPLE. 22144000
- END.END.END 22144200
- ELSE IF CHAR = NAK THEN GO NAKED 22144400
- ELSE 22144600
- BEGIN 22144800
- RECEIVEONE (WAITFORNEXTREPLY). 22145000
- GO ISTHISSTX 22145200
- END. 22145400
- STOPPED: 22145600
- BREAK[TRANSMIT] = TRUE. 22145800
- CODE = ASCII. 22146000
- DEQUEUE=TRUE. 22146200
- IF APPLECODE=DOWNLOADOP OR APPLECODE=FINISHDOWNLOADOP THEN 22146400
- BREAKNOTICE=TRUE 22146600
- ELSE APPLECODE=APPLECODE AND 4"0F". % MASK OFF XMIT CODES 22146800
- GO BROKEN. 22147000
- END.END. 22147200
- CHECK4RECV: 22147400
- IF APPLECODE NEQ 0 THEN 22147600
- BEGIN 22147800
- DEQUEUE=TRUE. % ACCEPT NO MORE TRANSMISSIONS UNTIL 22148000
- INITIALIZE RETRY % THIS REQUEST HAS BEEN SERVICED 22148200
- END. 22148400
- GO ENDXMIT 22148600
- END. 22148800
- 22149000
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22149200
- % END OF APPLE PROTOCOL 22149400
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%22149600
- 22149800
- NOTAPPLEBLOCK: 22150000
- INITIALIZE TEXT. 22150200
- TRANSMIT TEXT[BREAK:BROKEN]. 22150400
- GO TO ENDOFMSG. 22150600
- END. 22150800
- XMITMSG: 22151000
- FETCH[ENDOFBUFFER:ENDOFMSG]. 22151200
- DELETEBLANKS(TEMPCOUNTER,TEMPSTORAGE,BROKEN). 22151400
- IF CHAR = CR THEN 22151600
- WAITFORCR. 22151800
- GO XMITMSG. 22152000
- ENDOFMSG: 22152200
- IF NOT PAPERMOTION THEN 22152400
- GO TO MOVEPAPER. 22152600
- ENDXMIT: 22152800
- FINISH TRANSMIT. 22153000
- RETURNMSG: 22153200
- $ SET OMIT = ENHANCED 22153400
- TERMINATE NORMAL. 22153600
- $ SET OMIT = NOT ENHANCED 22153800
- TERMINATE NORMAL [SYSTEMDOWN:NULL]. 22154000
- DELAY (10 MILLI). 22154200
- GO RETURNMSG. 22154400
- $ POP OMIT OMIT 22154600
- BROKEN: 22154800
- NEWLINE=TRUE. 22155000
- DEQUEUE=TRUE. 22155100
- BREAK[TRANSMIT]=TRUE. 22155150
- TERMINATE ERROR. 22155200
- %***********************************************************************22155400
- 22155600
-